package cl.edinet.agencialinea3.ejb.service;

import cl.aperture.commons.ValidationException;
import cl.edinet.agencialinea3.ejb.bean.parametro.ParametroAelUsuario;
import cl.edinet.agencialinea3.ejb.bean.parametro.ParametroDeclaracion;
import cl.edinet.agencialinea3.ejb.bean.parametro.ParametroDocumento;
import cl.edinet.agencialinea3.ejb.entity.*;
import cl.edinet.agencialinea3.ejb.enums.EnumTipoUsuario;
import cl.edinet.agencialinea3.ejb.facade.*;
import java.math.BigDecimal;
import java.sql.Connection;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author Iván Zúñiga & Tomás Quinteros
 */
@Stateless
public class AgenciaLineaService implements AgenciaLineaServiceRemote {
    
    @EJB private DeclaracionFacade declaracionFacade;
    @EJB private DocumentoFacade documentoFacade;
    @EJB private ImportadorFacade importadorFacade;
    @EJB private AelUsuarioFacade aelUsuarioFacade;
    @EJB private AelSolicitudRegistroFacade aelSolicitudRegistroFacade;
    @EJB private AelAgenciaFacade aelAgenciaFacade;
    @EJB private AelSolicitudAccesoFacade aelSolicitudAccesoFacade;
    @EJB private AelTipoUsuarioFacade aelTipoUsuarioFacade;
    @EJB private AelEntidadFacade aelEntidadFacade;
    
    
    
    @Override
    public List<Declaracion> getDeclaraciones(ParametroDeclaracion parametros)  throws ValidationException {
        return declaracionFacade.findAllByParametros(parametros);
    }
    
     @Override
    public List<AelUsuario> getAelUsuarios(ParametroAelUsuario parametros) throws ValidationException {
        return aelUsuarioFacade.findAllByParametros(parametros);
    }
    @Override
    public Declaracion getDeclaracionByNumeroDespacho(BigDecimal numeroDespacho, boolean isIncluideItems){
        return declaracionFacade.getDeclaracionByNumeroDespacho(numeroDespacho,isIncluideItems);
    }
    
    @Override
    public List<Documento> getDocumentos(ParametroDocumento parametros) {
        return documentoFacade.findAllByParametros(parametros);
    }
    
    @Override
    public Documento getDocumentoByNumeroDespacho (BigDecimal numeroDespacho, boolean isIncluideItems){
        return documentoFacade.getDocumentoByNumeroDespacho(numeroDespacho,isIncluideItems);
    }
            
    @Override
    public List<Importador> getImportadores() {
        return importadorFacade.findAll();
    }
    
    @Override
    public List<AelUsuario> getAelUsuarios(){
        return aelUsuarioFacade.findAll();
    }

    @Override
    public Importador getImportador(BigDecimal idImportador) {
        return importadorFacade.find(idImportador);
    }
    
     @Override
    public AelUsuario getAelUsuario(BigDecimal idAelUsuario) {
        return aelUsuarioFacade.find(idAelUsuario);
    }

    
    @Override
    public int contarDeclaraciones(ParametroDeclaracion parametroDeclaracion)  throws ValidationException {
        return declaracionFacade.contarByFiltros(parametroDeclaracion);
        
    } 
    
    @Override
    public int contarAelUsuarios(ParametroAelUsuario parametroAelUsuario) throws ValidationException {
        return aelUsuarioFacade.contarByFiltros(parametroAelUsuario);
    }
    
    @Override
    public int contarDocumentos(ParametroDocumento parametroDocumento) {
        return documentoFacade.contarByFiltros(parametroDocumento);
    }

    @Override
    public AelUsuario getUsuarioLogin(String usuario, String clave) {
        return aelUsuarioFacade.findByLogin(usuario, clave);
    }

    @Override
    public BigDecimal generateIdSolicitudRegistro() {
        return aelSolicitudRegistroFacade.generateNextId();
    }

    @Override
    public void createSolicitudRegistro(AelSolicitudRegistro solicitudRegistro) {
        aelSolicitudRegistroFacade.create(solicitudRegistro);
    }

    @Override
    public AelAgencia getAgenciaByRut(Integer rut) {
        return aelAgenciaFacade.findByRut(rut);              
    }
    @Override
    public Importador getImportadorByRut(String rut) {
        return importadorFacade.findByRut(rut);
    }

    @Override
    public BigDecimal generateIdSolicitudAcceso() {
        return aelSolicitudAccesoFacade.generateNextId();      
    }
    @Override
    public void createSolicitudAcceso(AelSolicitudAcceso solicitudAcceso) {
        aelSolicitudAccesoFacade.create(solicitudAcceso);
    }

    @Override
    public BigDecimal generateIdUsuario() {
        return aelUsuarioFacade.generateNextId();
    }

    @Override
    public AelTipoUsuario getTipoUsuario(EnumTipoUsuario enumTipoUsuario) {
        return aelTipoUsuarioFacade.find(enumTipoUsuario.name());
    }

    @Override
    public void createUsuario(AelUsuario usuario) {
        aelUsuarioFacade.create(usuario);
    }

    @Override
    public void createAgencia(AelAgencia agencia) {
        aelAgenciaFacade.create(agencia);
    }
    

   //  @Override
   // public int contarUsuarios(ParametroAelUsuario parametroAelUsuario) {
   //     return aelUsuarioFacade.contarByFiltros(parametroAelUsuario);
   // }

    @Override
    public AelEntidad getEntidad(BigDecimal idEntidad) {
        return aelEntidadFacade.find(idEntidad);
    }

    @Override
    public void editUsuario(AelUsuario usuario) {
        aelUsuarioFacade.edit(usuario);
    }

    @Override
    public AelUsuario getUsuarioByRut(String rut) {
        return aelUsuarioFacade.findByRut(rut);
        
    }

    @Override
    public AelUsuario getUsuarioByNik(String nik) {
        return aelUsuarioFacade.findByNik(nik);
    }

   

    
   
    
}
